package com.wandian.util;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

/**
 * 后期需要优化,防止内存泄漏
 * @date : 2012-9-24, 14:21:16
 * @author: long
 */
public class Log {

	private static final String thisClassName = Log.class.getName();
//	private static final String STRING = "\r\n";
	// private static Logger logger = LogFactory.getLog(TexasServer.class);
	private static final Logger logger = LogManager.getLogger(Log.class);

	static {
		// logger = Logger.getLogger("");
	}

	private static Object getStackMsg(Object msg) {
		StackTraceElement[] ste = Thread.currentThread().getStackTrace();
		if (ste == null) {
			return "";
		}

		boolean srcFlag = false;
		for (int i = 0; i < ste.length; i++) {
			StackTraceElement s = ste[i];

			if (srcFlag) {
				return s.toString() + "\r\n" + msg.toString();
			}

			if (thisClassName.equals(s.getClassName())) {
				srcFlag = true;
				i++;
			}
		}
		return "";
	}

	public static Object getCurStackMsg(Object msg) {
		StackTraceElement[] ste = Thread.currentThread().getStackTrace();
		if (ste == null || ste.length < 3) {
			return "";
		}
		return ste[2].toString() + "\r\n" + msg.toString();
	}

	public static void debug(Object msg) {
		Object message = getStackMsg(msg);
		logger.debug(message);
	}

	public static void debug(Object msg, Throwable t) {
		Object message = getStackMsg(msg);
		logger.debug(message, t);
	}

	public static void info(Object msg) {
		Object message = getStackMsg(msg);
		logger.info(message);
	}

	public static void info(Object msg, Throwable t) {
		Object message = getStackMsg(msg);
		logger.info(message, t);
	}

	public static void warn(Object msg) {
		Object message = getStackMsg(msg);
		logger.warn(message);
	}

	public static void warn(Object msg, Throwable t) {
		Object message = getStackMsg(msg);
		logger.warn(message, t);
	}

	public static void error(Object msg) {
		Object message = getStackMsg(msg);
		logger.error(message);
	}

	public static void error(Object msg, Throwable t) {
		Object message = getStackMsg(msg);
		logger.error(message, t);
	}

	public static void fatal(Object msg) {
		Object message = getStackMsg(msg);
		logger.fatal(message);
	}

	public static void fatal(Object msg, Throwable t) {
		Object message = getStackMsg(msg);
		logger.fatal(message, t);
	}
}